package version2024.medium;

import java.util.*;

/**
 * @author sunhl
 * @Description: HJ66 配置文件恢复   字符串, 路由表定义
 * @Date: created in 2025/1/3 星期五 17:43
 * @Modified By:
 */
public class HJ66_ConfigurationFileRecovery {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 建立命令哈希表
        Map<String, String> command = getOrderMap();
        // 建立命令的路由表
        List<String[]> order = getOrderList();
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String input = in.nextLine();
            // 命令为多行字母时拆分为数组
            String[] inputs = input.split(" ");
            // 输入命令匹配成功的次数, 判断不唯一的情况
            int times = 0;
            // 匹配命令的key
            String[] compitable = null;

            // 遍历命令的路由表
            for (String[] cmpOrder : order) {
                // 输入字符串数组长度为一
                if (inputs.length == 1) {
                    //命令字符串数组长度为二，不匹配
                    if (cmpOrder.length == 2) {
                        continue;
                    } else if (cmpOrder[0].startsWith(inputs[0])) {
                        // 匹配成功
                        // 匹配成功数加一
                        times++;
                        // 保存匹配命令的key
                        compitable = cmpOrder;
                        continue;
                    }
                }

                // 输入字符串数组长度为二的情况
                if (inputs.length == 2) {
                    if (cmpOrder.length == 1) {
                        continue;
                    } else if (cmpOrder[0].startsWith(inputs[0])
                            && cmpOrder[1].startsWith(inputs[1])) {
                        times++;
                        compitable = cmpOrder;
                        continue;
                    }
                }
            }

            // 若匹配到命令大于1或未匹配到都认为匹配失败
            if (times > 1 || null == compitable) {
                System.out.println("unknown command");
            } else {
                // 匹配成功时打印
                System.out.println(command.get(String.join(" ", compitable)));
            }

        }
    }

    // 建立命令哈希表
    public static Map<String, String> getOrderMap() {
        Map<String, String> command = new HashMap<>();
        // 向哈希表里添加命令键值对
        command.put("reset", "reset what");
        command.put("reset board", "board fault");
        command.put("board add", "where to add");
        command.put("board delete", "no board at all");
        command.put("reboot backplane", "impossible");
        command.put("backplane abort", "install first");

        return command;
    }

    // 建立命令视图
    public static List<String[]> getOrderList() {
        List<String[]> order = new ArrayList<>();
        order.add("reset".split(" "));
        order.add("reset board".split(" "));
        order.add("board add".split(" "));
        order.add("board delete".split(" "));
        order.add("reboot backplane".split(" "));
        order.add("backplane abort".split(" "));

        return order;
    }
}
